import logging
import re
from docx import Document
import src.diy_basic.string as diy_string
import numpy as np

# doc = docx.Document(document_path) docx不是这个定义的包
# table_no 表格号，文中第几个表格
# 返回的是一个二维数组，一行一个小数组
# 方法，读取文档中的表格数据
def extract_table(folder_path, document_name, table_no):
    logging.info("调用office.docx.extract_table，开始读取文档中的表格数据")

    # 拼接文件路径
    document_path = '/'.join([folder_path, document_name])
    # 文件路径上去掉多余的/
    document_path = diy_string.string_deduplication(document_path, '/')
    logging.info(f"读取文档《{document_path}》中第{table_no}个表格的数据")
    doc = Document(document_path)

    # 校验
    if not doc:
        logging.warning("文档数据为空")
        return None
    # table_no 校验
    # 表格索引从0开始（第3个表格的索引为2）
    table_index = table_no - 1
    tables = doc.tables
    if len(tables) <= 0:
        logging.warning("该文档中不存在表格")
        return None
    if table_index >= len(tables):
        logging.warning("指定的表格索引超出范围，文档中不存在该表格")
        return None

    # 取值
    table = tables[table_index]
    # 提取表格数据
    table_data_list = []
    for row in table.rows:
        row_data = []
        for cell in row.cells:
            # if isinstance(cell, DocPicutre)
            # TODO 表格图片读取
            row_data.append(cell.text[:100])
            # cell.
        table_data_list.append(row_data)

    # 提示
    col_no_max = 0
    for row in table_data_list:
        col_no_max = max(col_no_max, len(row))
    logging.info(f"表格数据读取完成，表格有{len(table_data_list)}行，最多有{col_no_max}列")

    return table_data_list

# folder_path 文件夹
# document_name 文件名（含格式）
# table_no 表格号，文中第几个表格
# 返回的是一个二维数组，一行一个小数组
# 方法，读取文档中的表格数据
def extract_table_as_one_dimensional_list(folder_path, document_name, table_no):

    # 提取表格数据
    table_data = extract_table(folder_path, document_name, table_no)

    # 数据拍平，二维表格数据降为一维
    return list(np.array(table_data).flatten())



# 提取简历表格中的姓名（中文）
def extract_name(folder_path, document_name, table_no):
    for row in extract_table(folder_path, document_name, table_no):
        for index,col in enumerate(row):
            chinese_list = re.findall(r'[\u4e00-\u9fa5]', col[:10])
            if ''.join(chinese_list) == '姓名':
                return row[index + 1]
    return None

